package com.tennis.tennisreservation.controller;

import com.tennis.tennisreservation.common.Result;
import com.tennis.tennisreservation.entity.Image;
import com.tennis.tennisreservation.service.ImageService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 图片控制器
 * 处理图片上传和管理相关的请求
 */
@RestController
@RequestMapping("/api/image")
public class ImageController {

    private static final Logger logger = LoggerFactory.getLogger(ImageController.class);

    @Autowired
    private ImageService imageService;

    /**
     * 上传图片
     * @param file 图片文件
     * @param type 图片类型（可选）
     * @return 图片信息
     */
    @PostMapping("/upload")
    public Result<Image> uploadImage(
            @RequestParam("file") MultipartFile file,
            @RequestParam(value = "type", required = false) String type) {
        try {
            Image image = imageService.uploadImage(file, type);
            return Result.success(image);
        } catch (Exception e) {
            logger.error("上传图片失败", e);
            return Result.fail("上传图片失败：" + e.getMessage());
        }
    }

    /**
     * 获取图片详情
     * @param id 图片ID
     * @return 图片信息
     */
    @GetMapping("/{id}")
    public Result<Image> getImageById(@PathVariable Long id) {
        Image image = imageService.getImageById(id);
        if (image != null) {
            return Result.success(image);
        } else {
            return Result.fail("图片不存在");
        }
    }

    /**
     * 获取指定类型的图片列表
     * @param type 图片类型
     * @return 图片列表
     */
    @GetMapping("/type/{type}")
    public Result<List<Image>> getImagesByType(@PathVariable String type) {
        if (!StringUtils.hasText(type)) {
            return Result.fail("图片类型不能为空");
        }
        List<Image> images = imageService.getImagesByType(type);
        return Result.success(images);
    }

    /**
     * 分页查询图片列表
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param type 图片类型（可选）
     * @return 图片列表
     */
    @GetMapping("/list")
    public Result<Map<String, Object>> getImageList(
            @RequestParam(defaultValue = "1") Integer pageNum,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false) String type) {
        
        Map<String, Object> data = imageService.getImageList(pageNum, pageSize, type);
        return Result.success(data);
    }

    /**
     * 删除图片
     * @param id 图片ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public Result<String> deleteImage(@PathVariable Long id) {
        boolean deleted = imageService.deleteImage(id);
        if (deleted) {
            return Result.success("删除成功");
        } else {
            return Result.fail("删除失败，图片不存在或已被删除");
        }
    }
}
